﻿
using System.Collections.Generic;
using WGS84;

namespace OSMLib
{

    public class OsmNode : IOsmNode
    {
        public readonly Wgs84Coordinate _wgs;
        public readonly Dictionary<string, string> _tags = new Dictionary<string, string>();

        public bool _hasName;

        public OsmNode(string lat, string lon)
        {
            _wgs = new Wgs84Coordinate(double.Parse(lat), double.Parse(lon));
        }

        public OsmNode(Wgs84Coordinate wgs)
        {
            _wgs = wgs;
        }

        public void AddTag(string key, string value, ref bool datasetUpdated)
        {
            if (key == "is_in:country_code" && value == "la")
                return;

            if (key == "is_in:country" && value == "Laos")
                return;

            if (key == "is_in:continent" && value == "Asia")
                return;

            if (key == "name")
                _hasName = true;

            if (_tags.ContainsKey(key))
            {
                if (_tags[key] == value)
                {
                    return; // already got key value.
                }
            }
            _tags.Add(key, value);
            datasetUpdated = true;
        }

        public bool IsPlace
        {
            get
            {
                if (_tags.ContainsKey("place"))
                {
                    return true;
                }

                return false;
            }
        }
     
        public string Name
        {
            get
            {
                string value;
                if (_tags.TryGetValue("name", out value))
                {
                    return value;
                }
                return null;
            }
        }

        public bool IsRestaurant
        {
            get
            {
                string value;
                if (_tags.TryGetValue("amenity", out value))
                {
                    if (value == "restaurant")
                        return true;
                }
                return false;
            }
        }


        public bool IsPlaceToVisitBusiness
        {
            get
            {
                string value;
                if (_tags.TryGetValue("amenity", out value))
                {
                    if (value == "bank")
                        return true;

                    if (value == "post_office")
                        return true;

                    if (value == "pharmacy")
                        return true;

                    if (value == "bureau_de_change")
                        return true;

                }
                return false;
            }
        }



        public bool IsPlaceToVisitLeisure
        {
            get
            {
                string value;
                if (_tags.TryGetValue("shop", out value))
                {
                    if (value == "books")
                        return true;

                    if (value == "supermarket")
                        return true;

                    if (value == "travel_agency")
                        return true;

                    if (value == "laundry")
                        return true;
                }

                if (_tags.TryGetValue("tourism", out value))
                {
                    if (value == "attraction")
                        return true;
                    if (value == "museum")
                        return true;
                }
                return false;
            }
        }

        public bool IsCafe
        {
            get
            {
                string value;
                if (_tags.TryGetValue("amenity", out value))
                {
                    if (value == "cafe")
                        return true;

                     if (value == "pub")
                        return true;
                }
                return false;
            }
        }

        public bool IsTemple
        {
            get
            {
                string value;
                if (_tags.TryGetValue("religion", out value))
                {
                    if (value == "buddhist")
                        return true;
                }

                if (_tags.TryGetValue("amenity", out value))
                {
                    if (value == "place_of_worship")
                        return true;
                }

                return false;
            }
        }

        public bool IsHotel
        {
            get
            {
                string value;
                if (_tags.TryGetValue("tourism", out value))
                {
                    if (value == "hotel")
                        return true;

                    if (value == "guest_house")
                        return true;
                }
                return false;
            }
        }


        public bool IsCity
        {
            get
            {
                string value;
                if (_tags.TryGetValue("place", out value))
                {
                    if (value == "city")
                        return true;
                }
                return false;
            }
        }
    }
}
